import * as vscode from 'vscode';
import {dedent} from "../../../utils";

// documentation中使用了代码块，代码块中写的事makedown格式，首行不能为空
let scrollTextItems = [
    {
        "label": "ScrollText_Create",
        "insertText": dedent`
        GUI:ScrollText_Create(\${1:parent}, \${2:ID}, \${3:x}, \${4:y}, \${5:width}, \${6:fontSize}, \${7:fontColor}, \${8:str}, \${9:scrollTime}, \${10:fontPath})
        `,
        "documentation": dedent`# 创建滚动文本
        [在线文档](http://engine-doc.996m2.com/web/#/22/2170)

        | 参数       | 必选                | 类型   | 注释          |
        | :--------- | :------------------ | :----- | :------------ |
        | parent     | 是                  | obj    | 父节点对象    |
        | ID         | 是                  | string | 唯一ID        |
        | x          | 是                  | int    | 位置 横坐标   |
        | y          | 是                  | int    | 位置 纵坐标   |
        | width      | 是                  | int    | 文本宽度      |
        | fontSize   | 是                  | int    | 字体大小      |
        | fontColor  | 是                  | string | 字体颜色      |
        | str        | 是                  | string | 文本内容      |
        | scrollTime | 否 [3.40.4版本生效] | int    | 滚动时长 (秒) |
        | fontPath   | 否 [3.40.6版本生效] | string | 字体文件路径  |

        - 示例代码

        \`\`\`
        local scrollText = GUI:ScrollText_Create(parent, "scrollText", 0, 0, 100, 16, "#000000", "文本内容")
        \`\`\`
        `
    },
    {
        "label": "ScrollText_setString",
        "insertText": dedent`
        GUI:ScrollText_setString(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置滚动文本内容
        [在线文档](http://engine-doc.996m2.com/web/#/22/2170)

        | 参数   | 必选 | 类型   | 注释         |
        | :----- | :--- | :----- | :----------- |
        | widget | 是   | obj    | 滚动文本对象 |
        | value  | 是   | string | 文本内容     |

        `
    },
    {
        "label": "ScrollText_getString",
        "insertText": dedent`
        GUI:ScrollText_getString(\${1:widget})
        `,
        "documentation": dedent`# 获取滚动文本内容
        [在线文档](http://engine-doc.996m2.com/web/#/22/2170)

        | 参数   | 必选 | 类型 | 注释         |
        | :----- | :--- | :--- | :----------- |
        | widget | 是   | obj  | 滚动文本对象 |

        `
    },
    {
        "label": "ScrollText_enableOutline",
        "insertText": dedent`
        GUI:ScrollText_enableOutline(\${1:widget}, \${2:color}, \${3:size})
        `,
        "documentation": dedent`# 设置滚动文本描边
        [在线文档](http://engine-doc.996m2.com/web/#/22/2170)

        | 参数   | 必选 | 类型   | 注释                |
        | :----- | :--- | :----- | :------------------ |
        | widget | 是   | obj    | 滚动文本对象        |
        | color  | 是   | string | 描边色值(“#000000”) |
        | size   | 是   | int    | 描边大小            |

        `
    },
    {
        "label": "ScrollText_setHorizontalAlignment",
        "insertText": dedent`
        GUI:ScrollText_setHorizontalAlignment(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置滚动文本水平对齐
        [在线文档](http://engine-doc.996m2.com/web/#/22/2170)

        | 参数   | 必选 | 类型 | 注释                                    |
        | :----- | :--- | :--- | :-------------------------------------- |
        | widget | 是   | obj  | 滚动文本对象                            |
        | value  | 是   | int  | 对齐方式： 1 左对齐 2 水平居中 3 右对齐 |

        `
    },
    {
        "label": "ScrollText_setTextColor",
        "insertText": dedent`
        GUI:ScrollText_setTextColor(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置滚动文本颜色
        [在线文档](http://engine-doc.996m2.com/web/#/22/2170)

        | 参数   | 必选 | 类型   | 注释            |
        | :----- | :--- | :----- | :-------------- |
        | widget | 是   | obj    | 滚动文本对象    |
        | value  | 是   | string | 色值(“#000000”) |

        `
    }
]


export function getCompletionItems(): vscode.CompletionItem[] {


    const completionItems: vscode.CompletionItem[] = [];
    scrollTextItems.forEach((item: any) => {
        completionItems.push(createFunctionCompletionItem(item.label, item.insertText, item.documentation));
    });
    return completionItems;
}

function createFunctionCompletionItem(label: string, insertText: string, documentation?: string): vscode.CompletionItem {
    const item = new vscode.CompletionItem(label, vscode.CompletionItemKind.Function);
    item.insertText = new vscode.SnippetString(insertText);
    if (documentation) {
        item.documentation = new vscode.MarkdownString(documentation);
    }
    return item;
}
